The present application generally relates to the field of electronic access control (“EAC”) devices. The present disclosure relates more specifically to systems and methods of providing different functionality to EAC devices using multiple algorithm/operand pairs, each tied to one or more different functions.
Some EAC systems use rolling codes or one-time-passcodes. The basic premise with these is that a code-generating computer that generates the access code (e.g., a central computer or a handheld computer) and an EAC device into which the code is entered (e.g., an EAC lock) each have the same algorithm programmed into them, have the same unique “secret” value for that algorithm stored in them, and have the same “counter” starting value for that algorithm stored in them. Each time the EAC device is to be accessed, (1) the code-generating computer applies the algorithm using the secret and the current value of the counter as operands to generate a first code that is unique to that secret/counter pair and (2) the EAC device applies the same algorithm to ostensibly the same secret and current value of the counter a second codes that is unique due to that secret/counter pair. In theory the first and second codes are the same. When the code is entered into the EAC device its processor compares the entered code to the code it internally calculated based on it having the same algorithm, secret, and counter value. If the codes match, the EAC device opens/unlocks the target device, such as a latch, shackle, door, gate, locker, cabinet, drawer, or other closure. After the code is generated and used, the counter variable in the code-generating computer and the EAC device both identically indexes forward by one or more which invalidates previously generated codes. In some systems, if the code generated by the code-generating computer does not match the code generated internally by the EAC device, the EAC device will temporarily index the counter and recalculate one or more codes within a window of counter values, e.g., 100 counter values upward and 100 counter values downward and compare each to the code generated by the code-generating computer to try to find a match in case. Once a match is found, the counter value can be updated to the one that generated a matching code.